home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / BlitzC2P / c2p030onlyCLS.ascii < prev    next >
Text File  |  1998-08-01  |  8KB  |  525 lines

  1. WBStartup
  2. NoCli
  3.  
  4. ; CLEARSCREEN version. Additional code by Paul West.
  5.  
  6. ; Non-clearscreen results:
  7.  
  8. ; 030/50 results:
  9.  
  10. ; 320x200 @40.4fps PAL
  11. ; 320x256 @30.7fps PAL
  12. ; 320x200 @44.1fps PAL
  13. ; 320x256 @33.8fps PAL
  14.  
  15. ; 040/25 results:
  16.  
  17. ; 320x200 @42fps DoublePAL or 44fps PAL
  18. ; 320x256 @31fps DoublePAL or 34fps PAL
  19. ; 320x240 @33.6fps DoublePAL or 36.5fps PAL
  20.  
  21. #c2pBPLX=320
  22. #c2pBPLY=256
  23. #c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
  24.  
  25. #scrwidth=#c2pBPLX
  26. #scrheight=#c2pBPLY
  27. #screensize=#scrwidth*#scrheight
  28.  
  29. #clearscreento=$00000000
  30.  
  31. ; c2p1x1_8_c5
  32. ;
  33. ; 132% on 040-25
  34.  
  35. Statement c2p030onlyinit{A.l,B.l}
  36.  
  37.   ;A.l=d0=Width.w
  38.   ;B.l=d1=Height.w
  39.  
  40. ; d0.w  chunkyx [chunky-pixels]
  41. ; d1.w  chunkyy [chunky-pixels]
  42. ; d2.w  (scroffsx) [screen-pixels]
  43. ; d3.w  scroffsy [screen-pixels]
  44. ; d4.w  (rowlen) [bytes] -- offset between one row and the next in a bpl
  45. ; d5.l  (c2pBPLSIZE) [bytes] -- offset between one row in one bpl and the next bpl
  46.  
  47.   MOVEQ.l #0,d2
  48.   MOVEQ.l #0,d3
  49.   MOVE.l  #c2pBPLX/8,d4
  50.   MOVE.l  d4,d5
  51.   MULU    d1,d5
  52.  
  53.   LEA c2p_datanew(pc),a0
  54.   ANDI.l  #$ffff,d0
  55.   MULU.w  d0,d3
  56.   LSR.l #3,d3
  57.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  58.   MULU.w  d0,d1
  59.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  60. AsmExit
  61. End Statement
  62.  
  63. Statement c2p030only{A.l,B.l}
  64.  
  65.   MOVE.l  d0,a0 ; Chunky
  66.   MOVE.l  d1,a1 ; Planar
  67.  
  68. ; a0  c2pscreen
  69. ; a1  bitplanes
  70.  
  71. c2p1x1_8_c5
  72.   MOVEM.l a2-a6,-(a7)
  73.  
  74.   MOVEM.l a0-a1,-(a7)
  75.   LEA c2p_datanew,a0
  76.   LEA c2p_data,a1
  77.   MOVEQ #16-1,d0
  78. _copy: MOVE.l  (a0)+,(a1)+
  79.   DBF d0,_copy
  80.   MOVEM.l (a7)+,a0-a1
  81.   LEA c2p_data(pc),a2
  82.  
  83.   MOVE.l  #$33333333,d5
  84.   MOVE.l  #$55555555,d6
  85.   MOVE.l  #$00ff00ff,a6
  86.  
  87.   ADD.w #c2pBPLSIZE,a1
  88.   ADD.l c2p_scroffs-c2p_data(a2),a1
  89.  
  90.   MOVE.l  c2p_pixels-c2p_data(a2),a2
  91.   ADD.l a0,a2
  92.   CMP.l a0,a2
  93.   BEQ _none
  94.  
  95.   MOVEM.l a0-a1,-(a7)
  96.  
  97.   MOVE.l  (a0),d0
  98.   MOVE.l  #clearscreento,(a0)+
  99.   MOVE.l  (a0),d2
  100.   MOVE.l  #clearscreento,(a0)+
  101.   MOVE.l  (a0),d1
  102.   MOVE.l  #clearscreento,(a0)+
  103.   MOVE.l  (a0),d3
  104.   MOVE.l  #clearscreento,(a0)+
  105.  
  106.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  107.   AND.l d4,d0
  108.   AND.l d4,d2
  109.   LSL.l #4,d0
  110.   OR.l  d2,d0
  111.  
  112.   AND.l d4,d1
  113.   AND.l d4,d3
  114.   LSL.l #4,d1
  115.   OR.l  d3,d1
  116.  
  117.   MOVE.l  d1,a3
  118.  
  119.   MOVE.l  (a0),d2
  120.   MOVE.l  #clearscreento,(a0)+
  121.   MOVE.l  (a0),d1
  122.   MOVE.l  #clearscreento,(a0)+
  123.   MOVE.l  (a0),d3
  124.   MOVE.l  #clearscreento,(a0)+
  125.   MOVE.l  (a0),d7
  126.   MOVE.l  #clearscreento,(a0)+
  127.  
  128.   AND.l d4,d2     ; Merge 4x1, part 2
  129.   AND.l d4,d1
  130.   LSL.l #4,d2
  131.   OR.l  d1,d2
  132.  
  133.   AND.l d4,d3
  134.   AND.l d4,d7
  135.   LSL.l #4,d3
  136.   OR.l  d7,d3
  137.  
  138.   MOVE.l  a3,d1
  139.  
  140.   MOVE.w  d2,d7     ; Swap 16x2
  141.   MOVE.w  d0,d2
  142.   SWAP  d2
  143.   MOVE.w  d2,d0
  144.   MOVE.w  d7,d2
  145.  
  146.   MOVE.w  d3,d7
  147.   MOVE.w  d1,d3
  148.   SWAP  d3
  149.   MOVE.w  d3,d1
  150.   MOVE.w  d7,d3
  151.  
  152.   BRA _start1
  153. _x1
  154.   MOVE.l  (a0),d0
  155.   MOVE.l  #clearscreento,(a0)+
  156.   MOVE.l  (a0),d2
  157.   MOVE.l  #clearscreento,(a0)+
  158.   MOVE.l  (a0),d1
  159.   MOVE.l  #clearscreento,(a0)+
  160.   MOVE.l  (a0),d3
  161.   MOVE.l  #clearscreento,(a0)+
  162.  
  163.   MOVE.l  d7,c2pBPLSIZE(a1)
  164.  
  165.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  166.   AND.l d4,d0
  167.   AND.l d4,d2
  168.   LSL.l #4,d0
  169.   OR.l  d2,d0
  170.  
  171.   AND.l d4,d1
  172.   AND.l d4,d3
  173.   LSL.l #4,d1
  174.   OR.l  d3,d1
  175.  
  176.   MOVE.l  d1,a3
  177.  
  178.   MOVE.l  (a0),d2
  179.   MOVE.l  #clearscreento,(a0)+
  180.   MOVE.l  (a0),d1
  181.   MOVE.l  #clearscreento,(a0)+
  182.   MOVE.l  (a0),d3
  183.   MOVE.l  #clearscreento,(a0)+
  184.   MOVE.l  (a0),d7
  185.   MOVE.l  #clearscreento,(a0)+
  186.  
  187.   MOVE.l  a4,(a1)+
  188.  
  189.   AND.l d4,d2     ; Merge 4x1, part 2
  190.   AND.l d4,d1
  191.   LSL.l #4,d2
  192.   OR.l  d1,d2
  193.  
  194.   AND.l d4,d3
  195.   AND.l d4,d7
  196.   LSL.l #4,d3
  197.   OR.l  d7,d3
  198.  
  199.   MOVE.l  a3,d1
  200.  
  201.   MOVE.w  d2,d7     ; Swap 16x2
  202.   MOVE.w  d0,d2
  203.   SWAP  d2
  204.   MOVE.w  d2,d0
  205.   MOVE.w  d7,d2
  206.  
  207.   MOVE.w  d3,d7
  208.   MOVE.w  d1,d3
  209.   SWAP  d3
  210.   MOVE.w  d3,d1
  211.   MOVE.w  d7,d3
  212.  
  213.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  214. _start1
  215.   MOVE.l  a6,d4
  216.  
  217.   MOVE.l  d2,d7     ; Swap 2x2
  218.   LSR.l #2,d7
  219.   EOR.l d0,d7
  220.   AND.l d5,d7
  221.   EOR.l d7,d0
  222.   LSL.l #2,d7
  223.   EOR.l d7,d2
  224.  
  225.   MOVE.l  d3,d7
  226.   LSR.l #2,d7
  227.   EOR.l d1,d7
  228.   AND.l d5,d7
  229.   EOR.l d7,d1
  230.   LSL.l #2,d7
  231.   EOR.l d7,d3
  232.  
  233.   MOVE.l  d1,d7
  234.   LSR.l #8,d7
  235.   EOR.l d0,d7
  236.   AND.l d4,d7
  237.   EOR.l d7,d0
  238.   LSL.l #8,d7
  239.   EOR.l d7,d1
  240.  
  241.   MOVE.l  d1,d7
  242.   LSR.l #1,d7
  243.   EOR.l d0,d7
  244.   AND.l d6,d7
  245.   EOR.l d7,d0
  246.   MOVE.l  d0,c2pBPLSIZE*2(a1)
  247.   ADD.l d7,d7
  248.   EOR.l d1,d7
  249.  
  250.   MOVE.l  d3,d1
  251.   LSR.l #8,d1
  252.   EOR.l d2,d1
  253.   AND.l d4,d1
  254.   EOR.l d1,d2
  255.   LSL.l #8,d1
  256.   EOR.l d1,d3
  257.  
  258.   MOVE.l  d3,d1
  259.   LSR.l #1,d1
  260.   EOR.l d2,d1
  261.   AND.l d6,d1
  262.   EOR.l d1,d2
  263.   ADD.l d1,d1
  264.   EOR.l d1,d3
  265.  
  266.   MOVE.l  d2,a4
  267.   MOVE.l  d3,a5
  268.  
  269.   CMPA.l  a0,a2
  270.   BNE _x1
  271.  
  272.   MOVE.l  d7,c2pBPLSIZE(a1)
  273.   MOVE.l  a4,(a1)+
  274.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  275.  
  276.   MOVEM.l (a7)+,a0-a1
  277.   ADD.l #c2pBPLSIZE*4,a1
  278.  
  279.   MOVE.l  (a0),d0
  280.   MOVE.l  #clearscreento,(a0)+
  281.   MOVE.l  (a0),d2
  282.   MOVE.l  #clearscreento,(a0)+
  283.   MOVE.l  (a0),d1
  284.   MOVE.l  #clearscreento,(a0)+
  285.   MOVE.l  (a0),d3
  286.   MOVE.l  #clearscreento,(a0)+
  287.  
  288.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  289.   AND.l d4,d0
  290.   AND.l d4,d2
  291.   LSR.l #4,d2
  292.   OR.l  d2,d0
  293.  
  294.   AND.l d4,d1
  295.   AND.l d4,d3
  296.   LSR.l #4,d3
  297.   OR.l  d3,d1
  298.  
  299.   MOVE.l  d1,a3
  300.  
  301.   MOVE.l  (a0),d2
  302.   MOVE.l  #clearscreento,(a0)+
  303.   MOVE.l  (a0),d1
  304.   MOVE.l  #clearscreento,(a0)+
  305.   MOVE.l  (a0),d3
  306.   MOVE.l  #clearscreento,(a0)+
  307.   MOVE.l  (a0),d7
  308.   MOVE.l  #clearscreento,(a0)+
  309.  
  310.   AND.l d4,d2     ; Merge 4x1, part 2
  311.   AND.l d4,d1
  312.   LSR.l #4,d1
  313.   OR.l  d1,d2
  314.  
  315.   AND.l d4,d3
  316.   AND.l d4,d7
  317.   LSR.l #4,d7
  318.   OR.l  d7,d3
  319.  
  320.   MOVE.l  a3,d1
  321.  
  322.   MOVE.w  d2,d7     ; Swap 16x2
  323.   MOVE.w  d0,d2
  324.   SWAP  d2
  325.   MOVE.w  d2,d0
  326.   MOVE.w  d7,d2
  327.  
  328.   MOVE.w  d3,d7
  329.   MOVE.w  d1,d3
  330.   SWAP  d3
  331.   MOVE.w  d3,d1
  332.   MOVE.w  d7,d3
  333.  
  334.   BRA _start2
  335. _x2
  336.   MOVE.l  (a0),d0
  337.   MOVE.l  #clearscreento,(a0)+
  338.   MOVE.l  (a0),d2
  339.   MOVE.l  #clearscreento,(a0)+
  340.   MOVE.l  (a0),d1
  341.   MOVE.l  #clearscreento,(a0)+
  342.   MOVE.l  (a0),d3
  343.   MOVE.l  #clearscreento,(a0)+
  344.  
  345.   MOVE.l  d7,c2pBPLSIZE(a1)
  346.  
  347.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  348.   AND.l d4,d0
  349.   AND.l d4,d2
  350.   LSR.l #4,d2
  351.   OR.l  d2,d0
  352.  
  353.   AND.l d4,d1
  354.   AND.l d4,d3
  355.   LSR.l #4,d3
  356.   OR.l  d3,d1
  357.  
  358.   MOVE.l  d1,a3
  359.  
  360.   MOVE.l  (a0),d2
  361.   MOVE.l  #clearscreento,(a0)+
  362.   MOVE.l  (a0),d1
  363.   MOVE.l  #clearscreento,(a0)+
  364.   MOVE.l  (a0),d3
  365.   MOVE.l  #clearscreento,(a0)+
  366.   MOVE.l  (a0),d7
  367.   MOVE.l  #clearscreento,(a0)+
  368.  
  369.   MOVE.l  a4,(a1)+
  370.  
  371.   AND.l d4,d2     ; Merge 4x1, part 2
  372.   AND.l d4,d1
  373.   LSR.l #4,d1
  374.   OR.l  d1,d2
  375.  
  376.   AND.l d4,d3
  377.   AND.l d4,d7
  378.   LSR.l #4,d7
  379.   OR.l  d7,d3
  380.  
  381.   MOVE.l  a3,d1
  382.  
  383.   MOVE.w  d2,d7     ; Swap 16x2
  384.   MOVE.w  d0,d2
  385.   SWAP  d2
  386.   MOVE.w  d2,d0
  387.   MOVE.w  d7,d2
  388.  
  389.   MOVE.w  d3,d7
  390.   MOVE.w  d1,d3
  391.   SWAP  d3
  392.   MOVE.w  d3,d1
  393.   MOVE.w  d7,d3
  394.  
  395.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  396. _start2
  397.   MOVE.l  a6,d4
  398.  
  399.   MOVE.l  d2,d7     ; Swap 2x2
  400.   LSR.l #2,d7
  401.   EOR.l d0,d7
  402.   AND.l d5,d7
  403.   EOR.l d7,d0
  404.   LSL.l #2,d7
  405.   EOR.l d7,d2
  406.  
  407.   MOVE.l  d3,d7
  408.   LSR.l #2,d7
  409.   EOR.l d1,d7
  410.   AND.l d5,d7
  411.   EOR.l d7,d1
  412.   LSL.l #2,d7
  413.   EOR.l d7,d3
  414.  
  415.   MOVE.l  d1,d7
  416.   LSR.l #8,d7
  417.   EOR.l d0,d7
  418.   AND.l d4,d7
  419.   EOR.l d7,d0
  420.   LSL.l #8,d7
  421.   EOR.l d7,d1
  422.  
  423.   MOVE.l  d1,d7
  424.   LSR.l #1,d7
  425.   EOR.l d0,d7
  426.   AND.l d6,d7
  427.   EOR.l d7,d0
  428.   MOVE.l  d0,c2pBPLSIZE*2(a1)
  429.   ADD.l d7,d7
  430.   EOR.l d1,d7
  431.  
  432.   MOVE.l  d3,d1
  433.   LSR.l #8,d1
  434.   EOR.l d2,d1
  435.   AND.l d4,d1
  436.   EOR.l d1,d2
  437.   LSL.l #8,d1
  438.   EOR.l d1,d3
  439.  
  440.   MOVE.l  d3,d1
  441.   LSR.l #1,d1
  442.   EOR.l d2,d1
  443.   AND.l d6,d1
  444.   EOR.l d1,d2
  445.   ADD.l d1,d1
  446.   EOR.l d1,d3
  447.  
  448.   MOVE.l  d2,a4
  449.   MOVE.l  d3,a5
  450.  
  451.   CMPA.l  a0,a2
  452.   BNE _x2
  453.  
  454.   MOVE.l  d7,c2pBPLSIZE(a1)
  455.   MOVE.l  a4,(a1)+
  456.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  457.  
  458. _none
  459.   MOVEM.l (a7)+,a2-a6
  460. AsmExit
  461.  
  462.   Even4
  463. c2p_data
  464. c2p_scroffs: Dc.l 0
  465. c2p_pixels: Dc.l 0
  466.   Ds.l  16
  467.   Even4
  468. c2p_datanew
  469.   Ds.l  16
  470. End Statement
  471.  
  472.  
  473.  
  474.  
  475. .blitzprogram
  476. ; Setup
  477. InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
  478. CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
  479. InitPalette 0,256
  480. For c=0 To 255
  481.   AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
  482. Next c
  483. AGAPalRGB 0,0,0,0,0
  484. Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
  485. Use Palette 0
  486. VWait 50
  487. baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
  488.  
  489. ; Put something into the chunky buffer so we can see it working
  490. GetReg a0,baseaddress1
  491. MOVE.l  #0,d0
  492. MOVE.l  #screensize-1,d1
  493. cloop
  494.   MOVE.b  d0,(a0)+
  495.   ADDQ.l  #1,d0
  496.   SUBQ.l  #1,d1
  497.   TST.l   d1
  498.   BLT     done
  499.   BRA     cloop
  500. done
  501.  
  502. ; Do the c2p test
  503. c2p030onlyinit{#scrwidth,#scrheight}
  504. VWait 20
  505. Forbid_
  506. VWait
  507. ResetTimer
  508. For time=1 To 800
  509.   c2p030only{baseaddress1,Bank(0)} ; Convert chunky to planar
  510. Next time
  511. t=Ticks
  512. VWait 2 : Permit_
  513. VWait 20
  514. FindScreen 0
  515. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  516. WindowOutput 0
  517. NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
  518. NPrint " "
  519. NPrint "Press mousebutton..."
  520. Free Screen 0
  521. MouseWait
  522. Free Window 0
  523. End
  524.  
  525.